/*
 * Copyright (c) 2018-2999 湖南洛云网络科技有限公司 All rights reserved.
 *
 * https://www.gz-yami.com/
 *
 */

package com.yami.shop.dao;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yami.shop.bean.dto.FlowAnalysisDto;
import com.yami.shop.bean.dto.SystemDto;
import com.yami.shop.bean.model.FlowUserAnalysis;
import com.yami.shop.bean.param.*;
import com.yami.shop.common.util.PageParam;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @author YXF
 * @date 2020-07-17 09:50:13
 */
public interface FlowUserAnalysisMapper extends BaseMapper<FlowUserAnalysis> {

    /**
     * 根据时间范围获取获取用户分析数据
     * @param startTime 起始时间
     * @param endTime 结束时间
     * @return 用户流量分析列表
     */
    List<FlowUserAnalysis> getUserAnalysisData(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 根据商品分析概况参数获取添加商品进入购物车的商品件数
     * @param param 商品分析概况参数
     * @return 添加商品进入购物车的商品件数
     */
    Integer countAddCartProdNum(@Param("param") ProdAnalysisSurveyParam param);

    /**
     * 根据商品分析概况参数获取流量趋势
     * @param flowAnalysisParam 商品分析概况参数
     * @return 流量分析页面数据统计列表
     */
    List<FlowAnalysisDto> flowTrend(@Param("flowAnalysisParam") FlowAnalysisParam flowAnalysisParam);

    /**
     * 流量来源构成
     * @param flowAnalysisParam 商品分析概况参数
     * @return
     */
    List<FlowAnalysisDto> flowSour(@Param("flowAnalysisParam") FlowAnalysisParam flowAnalysisParam);

    /**
     * 获取流量分析数据
     * @param flowAnalysisParam 商品分析概况参数
     * @param startTime 起始时间
     * @return
     */
    List<FlowAnalysisDto> getFlowAnalysisData(@Param("flowAnalysisParam") FlowAnalysisParam flowAnalysisParam, @Param("startTime") Date startTime);

    /**
     * 根据商品分析概况参数获取不同系统类型流量分析用户浏览数据记录数量
     * @param flowAnalysisParam 商品分析概况参数
     * @return 不同系统记录数量
     */
    List<SystemDto> systemTypeNums(@Param("flowAnalysisParam") FlowAnalysisParam flowAnalysisParam);

    /**
     * 根据商品分析概况参数获取商品访客数列表
     * @param param 商品分析概况参数
     * @return 商品访客数列表
     */
    List<ProdAnalysisDataParam> countProdVisitorNum(@Param("param") ProdAnalysisSurveyParam param);

    /**
     * 根据商品分析概况参数获取数据统计列表
     * @param param 商品分析概况参数
     * @return 数据统计列表
     */
    List<ProdAnalysisDataParam> analysisSurvey(@Param("param") ProdAnalysisSurveyParam param);

    /**
     * 获取用户留存率, 统计用户第一次访问后，之后的几个月的留存用户数
     * @param param 条件查询参数
     * @return 访问留存信息列表
     */
    List<CustomerRetainRespParam> getVisitRetained(@Param("param") CustomerRetainedReqParam param);
}
